//: C21:Inventory.h
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 1999
// Copyright notice in Copyright.txt
#ifndef INVENTORY_H
#define INVENTORY_H
#include <iostream>
#include <cstdlib>
#include <ctime>

class Inventory
{
    char item;
    int quantity;
    int value;
public:
    Inventory(char it, int quant, int val)
            : item(it), quantity(quant), value(val) {}
    // Synthesized operator= & copy-constructor OK
    char getItem() const {
        return item;
    }
    int getQuantity() const {
        return quantity;
    }
    void setQuantity(int q) {
        quantity = q;
    }
    int getValue() const {
        return value;
    }
    void setValue(int val) {
        value = val;
    }
    friend std::ostream& operator<<(
        std::ostream& os, const Inventory& inv) {
        return os << inv.item << ": "
               << "quantity " << inv.quantity
               << ", value " << inv.value;
    }
};

// A generator:
struct InvenGen {
    InvenGen() {
        std::srand(std::time(0));
    }
    Inventory operator()() {
        static char c = 'a';
        int q = std::rand() % 100;
        int v = std::rand() % 500;
        return Inventory(c++, q, v);
    }
};
#endif // INVENTORY_H ///:~
